package model

import (
	"chat_srv/basic/config"
	"gorm.io/gorm"
	"time"
)

// 表情包表
type ImSticker struct {
	Id         uint      `gorm:"column:id;type:int UNSIGNED;comment:主键ID;primaryKey;not null;" json:"id"`                         // 主键ID
	Name       string    `gorm:"column:name;type:varchar(50);comment:表情包名称;not null;" json:"name"`                                // 表情包名称
	Url        string    `gorm:"column:url;type:varchar(500);comment:表情包地址;not null;" json:"url"`                                 // 表情包地址
	KeyWords   string    `gorm:"column:key_words;type:varchar(200);comment:搜索关键词;default:NULL;" json:"key_words"`                 // 搜索关键词
	Category   string    `gorm:"column:category;type:varchar(20);comment:表情包分类;default:NULL;" json:"category"`                    // 表情包分类
	UsageCount uint      `gorm:"column:usage_count;type:int UNSIGNED;comment:使用次数统计;default:NULL;" json:"usage_count"`            // 使用次数统计
	CreatedAt  time.Time `gorm:"column:created_at;type:datetime(3);comment:创建时间;default:CURRENT_TIMESTAMP(3);" json:"created_at"` // 创建时间
}

// 设置与数据库的映射
func (is *ImSticker) TableName() string {
	return "im_sticker"
}

// 获取热门表情包
func (is *ImSticker) GetHotSticker() (stickers []*ImSticker, err error) {
	err = config.DB.
		Find(&stickers).
		Order("usage_count desc").
		Limit(5).Error
	return stickers, err
}

// 根据分类获取表情包
func (is *ImSticker) GetStickerByCategory(category string) (stickers []*ImSticker, err error) {
	err = config.DB.
		Where("category = ?", category).
		Find(&stickers).
		Limit(5).Error
	return stickers, err
}

// 更新使用次数
func (is *ImSticker) UpdateUsageCount(stickerId uint) error {
	return config.DB.
		Model(&ImSticker{}).
		Where("id = ?", stickerId).
		Update("usage_count", gorm.Expr("usage_count + ?", 1)).Error
}
